"""Animal对象类
"""
class Animal:

    def __init__(self, name, color):
        """
        对象的初始化方法，类似与Java中的构造方法
        在初始化方法中给对象的属性赋值
        """
        self.name = name
        self.color = color
        # 定义对象的私有属性，私有属性外部不能访问
        self.__age = 18

    def __str__(self):
        """
        对象的toString() 方法
        """
        return "<class>Animal[name=%s, color=%s]" % (self.name, self.color)

    def eat(self):
        print("%s eat eat..." % self.name)


    def drink(self):
        print("%s drink drink..." % self.name)


    def __show_age(self):
        """
        定义对象的私有方法
        私有方法外部不能调用
        """
        print("age is %d..." % self.__age)

# 演示继承
class Dog(Animal):
    def __init__(self, name, color):
        """
        调用父类的初始化方法
        """
        # python2
        # Animal.__init__(self, name, color)
        # python3
        super().__init__(name, color)


    def __str__(self):
        """
        重写父类的toString()方法
        """
        return "<class>Dog[name=%s, color=%s]" % (self.name, self.color)


    def eat(self):
        super().eat()
        print("子类重写父类的方法~~~")

    def look_home(self):
        """
        看家的方法
        """
        print("%s look home..." % self.name)


# 创建对象
animal = Animal("狗子", "red")
animal.eat()
animal.drink()
print(animal)

dog = Dog("旺财", "blue")
dog.look_home()
dog.eat()
dog.drink()
print(dog)
